package com.crm.service;

import com.crm.base.BaseService;
import com.crm.dao.UserMapper;
import com.crm.model.UserModel;
import com.crm.utils.AssertUtil;
import com.crm.utils.Md5Util;
import com.crm.utils.UserIDBase64;
import com.crm.vo.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Service
public class UserService extends BaseService<User,Integer> {

    @Resource
    private UserMapper userMapper;

    /**
     * 用户登录
     * @param userName
     * @param userPwd
     */
    public UserModel userLogin(String userName,String userPwd){
        //1.参数判断，判断用户姓名密码不为空
        checkLoginParams(userName,userPwd);
        //2.调用数据访问层，通过用户名查询用户记录，返回用户对象
        User user = userMapper.queryUserByName(userName);
        //判断用户对象是否为空
        AssertUtil.isTrue(user==null,"用户姓名不存在！");
        //判断密码是否正确，比较客户端传递的用户密码与数据库中查询的用户对象中的用户密码
        checkUserPwd(userPwd,user.getUserPwd());
        //返回构建用户对象
        return buildUserInfo(user);
    }

    private void checkUserPwd(String userPwd, String pwd) {
        //将客户端传过来的密码加密
        userPwd= Md5Util.encode(userPwd);
        //判断密码是否相等
        AssertUtil.isTrue(!userPwd.equals(pwd),"用户密码不正确");

    }

    private void checkLoginParams(String userName, String userPwd) {
        //验证用户姓名
        AssertUtil.isTrue(StringUtils.isBlank(userName),"用户名不能为空！");
        //验证用户密码
        AssertUtil.isTrue(StringUtils.isBlank(userPwd),"密码不能为空！");
    }
    /**
     * 因为ajax不需要返回所有的数据，所以定义UserModel来返回需要的数据即可，从user里获取相对应的数据
     * @param user
     * @return
     */
    private UserModel buildUserInfo(User user) {
        UserModel userModel=new UserModel();
        //设置加密的用户ID
        userModel.setUserIdStr(UserIDBase64.encoderUserID(user.getId()));
        //userModel.setUserId(user.getId());
        userModel.setUserName(user.getUserName());
        userModel.setTrueName(user.getTrueName());
        return userModel;
    }


    public List<Map<String,Object>> queryAllSales(){
        return userMapper.queryAllSales();
    }
}
